home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / language / dl_exsrc.zoo / makepath.c < prev    next >
C/C++ Source or Header  |  1994-07-03  |  1KB  |  69 lines

  1. #include <string.h>
  2. #include "extras.h"
  3.  
  4. /*
  5. char *_makepath(char *dst, *drive, *path, *file, *ext)
  6.     Build the <dst> filename from component parts. Returns <dst>.
  7.     This function is basically in inverse of _splitpath(), and will
  8.     accept the components parsed by _splitpath() as input.  It will
  9.     also allow a little more flexibility in that it will treat any
  10.     component which is a NULL pointer as an empty field, and the
  11.     <path> component may optionally have a trailing '\'.
  12. */
  13.  
  14. #define DEFAULT_PATHSEP        '/'
  15.  
  16. char *_makepath(dst, drive, path, file, ext)
  17.   char *dst;
  18.   const char *drive, *path, *file, *ext;
  19. {
  20.   register char *s = dst;
  21.   register const char *t;
  22.   register char sep;
  23.  
  24.   if (drive) {
  25.     t = drive;
  26.     while (*s++ = *t++)
  27.       continue;
  28.     s--;
  29.     if (s[-1] == '/' || s[-1] == '\\')
  30.       *--s = '\0';
  31.   }
  32.  
  33.   if (path) {
  34.     t = strpbrk(path, "/\\");
  35.     if (t)
  36.       sep = *t;
  37.     else
  38.       sep = DEFAULT_PATHSEP;
  39.     t = path;
  40.     if (drive && *t != '/' && *t != '\\')
  41.       *s++ = sep;
  42.     while (*s++ = *t++)
  43.       continue;
  44.     s--;
  45.     if (s[-1] != '/' && s[-1] != '\\')
  46.       *s++ = sep;
  47.   } else if (drive) {
  48.     *s++ = DEFAULT_PATHSEP;
  49.   }
  50.  
  51.   if (file) {
  52.     t = file;
  53.     while (*s++ = *t++)
  54.       continue;
  55.     s--;
  56.   }
  57.  
  58.   if (ext) {
  59.     *s++ = '.';
  60.     t = ext;
  61.     while (*s++ = *t++)
  62.       continue;
  63.     s--;
  64.   }
  65.  
  66.   *s = '\0';
  67.   return dst;
  68. }
  69.